window.SETHIX API: BioArc Control Surface

A bio-architectural creature that lives on its own in thirty-two dimensions — and a control surface you can reach it through, deliberately built without a face.

Contract/token: 0x71eb648bdd6ebb161dcda890dfadd1d28972ea42/43

BioArc (Transmutation XLIII)

dimensions 32

attractors 9

symmetry bases 3

one file 116 KB

dependencies none


  • The three groups the body can be built on. Any convex mixture of them is a valid organism.



Contents

  1. The body

  2. Nine attractors

  3. How it moves

  4. The skin

  5. Two substances

  6. What it is made of

  7. The control surface

  8. Adapting it to this module

  9. Symmetry as a coefficient

  10. window.SETHIX

  11. Using it


01 The body

BioArc

(Transmutation XLIII) is a single distance field, evaluated a hundred and ninety-two times per pixel, per frame. There is no mesh. There are no vertices, no textures, no assets of any kind — one fullscreen triangle, and a function that answers the question how far is the nearest surface from here?

That function begins by folding space. Three mirror planes, applied seven times, collapse the whole of ℝ³ into one-hundred-and-twentieth of itself — a single Möbius triangle on the sphere, bounded by the icosahedral group's reflection planes. Everything built after that fold is mirrored back out into the full group automatically. One cone becomes twelve spikes. One bead chain becomes thirty ropes. One drilled window becomes a shell that looks carved by something with a plan.

Inside that domain, seven families of structure compete for the same space, each gated by its own coefficient so that it costs nothing when it is not present:


shell

a bevelled spherical wall, drilled with windows

five- and three-fold axes

ropes

bead chains strung between axis pairs

an edge family

rings

tori encircling the five-fold axes

five-fold axes

spikes

tapered cones that break the shell surface

both axis families

core

an inner granular mass with a packed bead lattice

the origin

flutes

radiating spokes in an angular sector repeat

the torus axis

pebbling

a six-wave icosahedral quasicrystal displacement

the whole field


The organism is dual-material. Every point the ray hits returns not only a distance but an identity: a matte ceramic exoskeleton, or a granular inner mass. The two are not two objects — they are two answers from one field, and which one you get depends on which structure won the minimum at that point. A shell is ceramic. A spike is granular. Where the core swells past the shell, the frame is simply buried, and the creature reads as one solid thing.


02 Nine attractors

They are attractors in a space, not models. Everything between them is a valid unnamed organism.

The nine landmark states. Each is one point in a thirty-two dimensional coefficient space; the organism spends most of its life somewhere between them, in forms that have no name.

Nine authored points anchor the space: CONICAL SPHERE, STELLATE SPIRE, RADIAL BURST, RHOMBIC PANEL, FILAMENT CAGE, TORUS FLUTE, GEODESIC CAGE, WOVEN SHELL, CHAMFER EXO. They are reachable, but they are not where the creature lives. It passes through them.


03 How it moves

The thirty-two coefficients are not animated. They are driven, by an affective governor with a mood — arousal, openness, tension — that drifts on fourteen mutually incommensurate clocks and accumulates fatigue and hunger as it works.

From that mood it chooses a phase. WANDER drifts. DWELL rests. TRANSIT commits to a landmark. SURGE, COLLAPSE and CRISIS are derived states, built from the organism's own position rather than from an authored one — an intensification, a retreat, a rupture.

A transit is not a straight line. The path between two states bows off the chord by a randomly drawn 0.28 to 0.75 of its length, in a direction projected perpendicular to the chord — so a journey from one attractor to another explores morphospace the straight path would never visit, and arrives having been somewhere.

Ninety seconds of one instance. A smooth granular sphere becomes a woven shell, then a spiked burst, then a filament cage — no cuts, no keyframes, and no state visited twice.

All of it runs on proper time τ, which advances at the organism's own metabolic rate rather than the wall clock's. A fast metabolism lives faster. Every duration in the system — a dwell, a palette transit, a gene's lag — is measured in it.

Two things keep that motion honest. A speed limiter bounds the total perceptual change per frame and retries with a smaller step when it is exceeded, so nothing can ever pop. And a low-discrepancy probe evaluates the field at five hundred and twelve quasi-random points every 170 ms, measuring how solid the creature currently is, how much surface it has, how strained its gradient field is — and the camera frames itself from those numbers rather than from a fixed distance.


04 The skin

The surface is a ten-gene nano-skin over one shared tissue basis: a drifting warped domain, cellular Worley noise, ridged noise, axial laminae, value noise. Ten genes read that one basis differently — laminae, honeycomb, fibrous web, membrane, papillae, mesh, crystalline petals, nuclei, dendritic flare, bead chains.

The architectural choice that makes it work

Genes shift a palette coordinate; they do not contribute colours to be averaged. Two active genes therefore beat against each other and produce bands neither of them contains. An earlier iteration averaged the colours and produced mud — reliably, at every setting. Beating produces hybrids.

Each gene's weight is driven by the geometry it belongs to: the laminae gene follows wall thickness, the honeycomb gene follows the windows, the nuclei gene follows the bead lattice. So the surface is not decoration applied to a shape — it is an expression of what that shape currently is. Colour comes from seven cosine palettes walking on a ninety-two second epoch, and the gene weights carry per-gene lags of 7.5 to 18 seconds, so they arrive and fade at different rates and never move as a block.


05 Two substances

The two materials are two domains of one tissue, and how far apart they are pulled is itself alive. A slewed material vector — outside the coefficient vector, taking no random draws — decides it, on three channels at once.


channel

what diverges

palette

the granular mass reads a second palette, two to four steps around the bank from the first — and the offset drifts, so the pairing changes from epoch to epoch

grain

the two substances take different tissue scales and different warp: one reads coarse and laminar, the other fine and cellular

genes

each gene is amplified on the substance it belongs to and suppressed on the other, so the shell wears patterns made by shell coefficients


Separately, either substance can go plain — collapsing to a solid bone ceramic or a solid cobalt, keeping only its finish and a whisper of the tissue's luminance. The two plainness values suppress one another, so one plain, one complex is the common regime and both-plain is reachable but rare.

Seventeen minutes of one instance. Left to right: a hot patterned shell against a solid mass; a solid cobalt mass; a plain cream shell with vividly patterned granular studs; a plain bone shell with iridescent spikes; both diverged and patterned; a cool shell against a solid blue interior. Nothing here was authored — the material vector is driven, and its maximum change is 0.0003 per frame.

06 What it is made of

One HTML file, 116 KB, pure WebGL2. No dependencies, no assets, no geometry beyond a single fullscreen triangle. A CPU simulation step costs about 1.5 ms; everything else is one fragment shader.

Two disciplines govern that shader, and both were learned expensively on earlier modules in this series.

Nothing is evaluated inside the march loop that does not have to be. The material, the skin, the ambient occlusion, the lighting — all of it runs once, at the surface hit. A previous module put thirty capsule distance functions inside the map function and took down the browser's shared GPU process.

No derivative instructions anywhere in the fragment shader. Not fwidth, not dFdx, not under a branch, not in a helper. Metal compiles them as quad operations requiring uniform control flow, and a derivative under divergent flow is a pattern its compiler can reject silently — the link succeeds, and then every draw writes nothing. That cost a fortnight of black screens on Transmutation XLI. Every SETHIX module since has zero.


07 The control surface

The organism runs itself. It does not need you. But it is not a black box either — the field, the affective governor, the symmetry group and the render pipeline are all reachable at runtime through window.SETHIX.

The interface is an immutable singleton, frozen at load, organised around five evolutionary dimensions:


namespace

what it reaches

genetics

the inherited drivers — metabolism, volatility, curiosity, stamina, mood set-points, attractor affinities. Mutate them, override them, or reseed the lineage without resetting proper time, so the creature branches rather than restarts.

morphogenesis

physical proportion, genus-shifting gates, which coefficients are allowed to drift — and the symmetry group the body is built on.

pattern

the quasicrystal's wavenumber and its six individually weighted waves; the micro-pebbling; the segmented ropes.

colour

each substance's albedo, roughness, specular and occlusion; and palette transits measured in proper time, held until released.

hybrid

cross-breeding, multi-attractor blending, the shape of a transit, and deterministic journeys through morphospace.


Alongside them: an event bus (phaseChange, probeTick, strainSpike, and four more), a single telemetry() call returning eighteen fields, and an unsafe namespace that skips every safety rule on purpose.

Two guarantees

Every write is clamped. Not by a bounds check — by the module's own geometric constraint solver, the thing that knows a window may not be wider than 0.38 × R₀ or two of them will overlap and dissolve the shell; that a chamfer larger than the wall it rounds means the wall stops existing; that beads wider than 0.46 × their spacing merge into a solid block. Methods return what was actually applied, not what was asked for. SETHIX.unsafe exists for exploring the broken regions deliberately, and says what it is in its name.

Nothing recompiles. Every control is a uniform. Driving the entire API — sixty-four methods, symmetry blends, material changes, palette transits — produces zero shader compiles and zero links. This is asserted in the test suite by wrapping gl.compileShader and gl.linkProgram with counters.


08 Adapting it to this module

A generic control surface fitted to a specific organism is mostly an exercise in honesty. Some of what was specified already existed. Some had to be built. And some had no referent at all.

What was built, because it did not exist

The specification named an octahedral symmetry basis, an axial generator, and per-octave quasicrystal amplitudes. None of the three were in the module. All three were built rather than aliased — a control that accepts an argument and ignores it is worse than one that does not exist.

The quasicrystal's six icosahedral wave vectors had always been summed with equal weight; they are now individually weighted and renormalised to sum to six, which keeps the Lipschitz divisor beneath the sum valid. Equal weights are the identity, so nothing changed for an untouched instance.

What was mapped, and stated

specified

reality

33-dimensional vector

it is 32; every index and name is documented

inflationFactor

no such driver exists; the derived tempo is exposed instead

landmark names from the brief

fuzzy-matched to the nine real attractors, so 'toroidal_filament' resolves to FILAMENT CAGE rather than failing silently

peak p-norm, L1 ball projection

the module's own constraint solver, which enforces the geometric rules that actually keep the field marchable


SETHIX.capabilities() returns that table at runtime. Nobody has to guess what a method touches.


09 Symmetry as a coefficient

The most interesting thing the adaptation produced was not a control. It was a discovery about the module's own architecture.

mapS — the function that builds the entire organism — had always taken its symmetry group from uniforms: three mirror normals, and the three characteristic axes of the Möbius triangle they bound. The morphology therefore did not need rewriting for a new group. It needed the group handed to it as an argument.

mapB(p, m1,m2,m3, aV,aF,aE)   // the whole organism, under ANY
                              //  kaleidoscopic group given by three
                              //  mirrors and its three axes

Three bases then become available. The shipped icosahedral one, Ih of order 120. An octahedral one, Oh of order 48 — the fundamental domain x ≥ y ≥ z ≥ 0, cut by the planes x=y, y=z, z=0, whose corners are the 4-, 3- and 2-fold axes. And an axial one, Dnh, an n-fold sector fold about the torus axis with an equatorial mirror.

The spherical triangles have measurably different shapes — corner dot products of 0.795 / 0.851 / 0.934 for the icosahedral against 0.577 / 0.707 / 0.816 for the octahedral — so the same coefficients produce cubic forms rather than dodecahedral ones. Six large windows instead of thirty small ones.

One coefficient vector, six symmetries. Icosahedral, octahedral, two axial folds, and two blends. The camera framing follows automatically, because the CPU probe was parameterised by the same group.

Why the blend is over distance fields

d = wi·dico + wo·docta + wa·daxial. A convex combination of 1-Lipschitz fields is 1-Lipschitz, so the raymarching bound stays exactly as valid as it is at the vertices, and the endpoints are mathematically exact. Blending the folded points instead would have cost one field evaluation rather than two — but the result bounds nothing, and the march would overshoot into holes.

The cost is gated on the weights, which are uniforms — so the branch is uniform across the draw rather than per-pixel, and legal under the no-derivatives law. At the default (1, 0, 0) the extra bases cost precisely nothing, and the render is bit-identical to the module without them. A measured two-field blend costs about 14% more per frame.

One small elegance fell out of it: a zero mirror normal is an exact no-op. p -= 2·min(0, dot(p, 0))·0 changes nothing. So the same three-mirror fold expresses the axial group, which has only one mirror, at no cost and with no branch.


10 window.SETHIX

window.SETHIX is a global JavaScript developer and simulation control interface embedded in real-time WebGL SETHIX Modules.

It exposes the underlying mathematical field, affective state engine, and GPU raymarching configuration to external scripts or the browser console. Instead of acting as a black-box renderer, the module uses this API to grant collectors, performers, and developers direct programmatic control over the organism’s evolutionary trajectory and rendering pipeline.

In BioArc the interface is an immutable singleton — the object and every namespace inside it frozen at load — carrying five evolutionary namespaces plus an unsafe namespace, the full set of observation methods, and seven events.

How it has been developed for BioArc

Earlier SETHIX modules exposed a flat collection of roughly thirty functions organised around the implementation. For BioArc the same underlying access has been reorganised around five evolutionary dimensions, with several controls built that did not exist in previous modules.

genetics —

getGenotype, mutate, setTraits, setAttractorAffinity, reseed These alter temperament rather than geometry. Metabolism scales proper time τ, so every duration in the system (dwell, palette transit, gene lag) advances faster or slower with the organism. Curiosity raises transit probability; stamina governs fatigue accumulation; volatility sets the distance the creature will travel from its current state. Affinity biases selection among the nine attractors. mutate(factor) applies Gaussian noise within each trait’s authored envelope. reseed(seed, preserveTime) regenerates the genotype and all fourteen clock phases from a new seed string without resetting proper time, allowing the lineage to branch while the organism continues living.

morphogenesis

— setStructureScale, lockMask, setSymmetryWeight, setAxialFold, setTopologicalGating lockMask freezes any subset of the thirty-two coefficients by name or index; the locked axes are restored after every integration step so the remainder of the body continues to evolve around them. setTopologicalGating scales the toroidal hole radius and tube section continuously, preventing genus changes from tearing the interior. setSymmetryWeight(iH, oH, axial) blends the body across the three point groups (normalised to sum to one). setAxialFold sets the axial group’s fold count between 2 and 24. The octahedral and axial bases themselves were constructed for this module.

pattern

— setQuasicrystal, setPebbleFrequency, setSegmentedRopes The six icosahedral wave vectors of the quasicrystal, previously summed with equal weight, are now individually weighted and renormalised to sum to six (preserving the Lipschitz divisor). The interference pattern can therefore be composed rather than only scaled. Rope geometry is expressed as bead pitch along the chord together with the twist that selects the edge family.

colour

— setWhiteMaterial, setBlueMaterial, blendPalette, releasePalette The ceramic exoskeleton and granular mass are independently addressable in albedo, roughness, specular and ambient occlusion. blendPalette(target, durationTau) transits the colour world to one of the seven palettes over a duration measured in proper time; releasePalette returns control to the ninety-two-second autonomous walk.

hybrid

— crossbreed, blendAttractors, setBezierBowing, sequencePath crossbreed(a, b, ratio) synthesises a hybrid of any two attractors; blendAttractors accepts a weighted map over all nine. setBezierBowing(magnitude, direction) controls how far a transit bows from the straight chord and, when given a thirty-two-element vector, the direction of that bow, steering the journey into regions of morphospace neither endpoint occupies. sequencePath(waypoints, loop) queues a deterministic sequence of landmarks with per-waypoint hold and transit times that completely overrides the phase machine (no random draws, no mood weighting). When the queue empties the organism resumes autonomous life.

A sixth namespace, unsafe, performs the identical operations without the constraint solver, for deliberate exploration of degenerate regions of the space.

Reading is complete. field(x, y, z) returns the signed distance at any point. probe() evaluates the 512-point low-discrepancy sampler and returns solidity, surface area, gradient strain and bounding radii. telemetry() returns eighteen fields in a single call: proper time, phase, strain, the full coefficient vector, mood, the ten gene weights, the material vector, the symmetry weights and the live render configuration.

Seven events are emitted: phaseChange, probeTick (approximately six times per second), strainSpike (when gradient strain exceeds 1.85 × reference), and genotype, symmetry, palette, hybrid when those namespaces act. Each dispatch is isolated; a throwing listener cannot halt the organism.

Every write is routed through the module’s geometric constraint solver before reaching a uniform. The solver enforces the actual geometric invariants that keep the field marchable (window width relative to shell radius, chamfer relative to wall thickness, bead diameter relative to spacing, etc.). Methods return the values that were actually applied. All controls are uniforms, so the entire API produces zero shader recompilations and zero program links. Controls added for the interface are API-only; an untouched instance renders bit-identically to the module without the interface.

Access

window.SETHIX is a global. Any code that holds a reference to the module’s window can reach it: a browser console, a script on an embedding page, a generative agent, an audio-analysis controller, or a scheduled process. The interface treats a human typing a command and a program issuing the same command identically; every call is clamped, validated and observed under the same rules.

The interface is deliberately concealed, having no user facing controls in the browser itself. The reason for this has to do with the aura;

When excessive interactivity or forced participation strips an artwork of its unique contemplative distance and sacredness, it is often critiqued through the concepts of interpassivity (where the interactive system or audience "enjoys" or reacts on behalf of the viewer) or the loss of aura (a term coined by philosopher Walter Benjamin to describe how uniqueness decays when overly exposed or mediated). When participation becomes a cheap gimmick, it risks reducing art to mere entertainment.


11 Using it

// it is already alive; nothing needs starting
SETHIX.telemetry().phase                    // → "TRANSIT"

// migrate the body from dodecahedral to cubic over a minute
let u = 0
const id = setInterval(() => {
  SETHIX.morphogenesis.setSymmetryWeight(1 - u, u, 0)
  if ((u += 0.01) > 1) clearInterval(id)
}, 600)

// hold the skeleton still and let only the interior evolve
SETHIX.morphogenesis.lockMask(['R0', 'thk', 'winV', 'winF'])

// synthesise a hybrid of two attractors
SETHIX.hybrid.crossbreed('TORUS FLUTE', 'GEODESIC CAGE', 0.6)

// a deterministic journey, looping — no random draws, no mood weighting
SETHIX.hybrid.sequencePath([
  { landmark: 'RADIAL BURST',  transit: 6, hold: 3, bow: 0.5 },
  { landmark: 'FILAMENT CAGE', transit: 9, hold: 2, bow: 0.7 },
], true)

// branch the lineage without restarting the creature
SETHIX.genetics.reseed('lineage-B')

// react to it
SETHIX.on('strainSpike', e => audio.trigger(e.strain))

The organism resumes its own life the moment a queued path empties. Nothing you do through the interface is permanent, and nothing you do through it can produce a torn field — unless you ask for that explicitly, in a namespace that tells you so.


All code is open source.

Contract: 0x71eb648bdd6ebb161dcda890dfadd1d28972ea42 — Substrate Transmutation [SETHIX] on OpenSea. Media on Arweave.